//1、IsNever：需要 包裹 泛型参数，来判断一个类型是否为 never 时：
type IsNever<T> = [T] extends [never] ? true : false;
type IsNeverRes1 = IsNever<never>; // true
type IsNeverRes2 = IsNever<"hanxuming">; // false

//2、IsAny
//这其中利用了：
//如果 交叉类型 的其中一个成员是 any，那 交叉类型短板效应就失效了，此时最终类型必然是 any 。
type Tmp4 = 1 & any; // any
//所以 IsAny 可以是：
type IsAny<T> = 0 extends 1 & T ? true : false;
type IsAnyRes1 = IsAny<any>; // true
type IsAnyRes2 = IsAny<"hanxuming">; // false

//3、IsUnknown：
//利用 unknown extends T 时仅有 T 为 any 或 unknown 时成立这一点，
//可以直接将类型收窄到 any 与 unknown，然后在去掉 any 类型：
type IsUnknown<T> = unknown extends T ? IsAny<T> extends true ? false : true : false;


//export {}：解决“无法重新声明块范围变量”错误提示问题
export { }